﻿#define  _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>

//int main()
//{
//	int n = 10;
//	int* p = &n;
//	int** ppa = &p;
//	**ppa = 20;
//	printf("%d\n", *p);
//	printf("%d\n", n);
//	return 0;
//}


//int main()
//{
//	int arr1[] = { 1,2,3,4,5 };
//	int arr2[] = { 2,3,4,5,6 };
//	int arr3[] = { 3,4,5,6,7 };
//	int* p1 = arr1;
//	int* p2 = arr2;
//	int* p3 = arr3;
//	int* str[3] = {p1,p2,p3};
//	int i = 0;
//	for(i = 0; i < 3;i++)
//	{
//		int j = 0;
//		for (j = 0; j < 5; j++)
//		{
//			printf("%d ", str[i][j]);
//		}
//		printf("\n");
//	}
//	return 0;
//}

//int main()
//{
//	char ch = 'w';
//	char* pc = &ch;
//	printf("%c\n", *pc);
//	const char* p = "帅哥";
//	const char* pa = "Hello c";
//	printf("%s\n", p);
//	printf("%s\n", pa);
//	return 0;
//}


//int main()
//{
//	char str1[] = "hello bit.";
//	char str2[] = "hello bit.";
//	const char* str3 = "hello bit.";
//	const char* str4 = "hello bit.";
//	if (str1 == str2)
//		printf("str1 and str2 are same\n");
//	else
//		printf("str1 and str2 are not same\n");
//	if (str3 == str4)
//		printf("str3 and str4 are same\n");
//	else
//		printf("str3 and str4 are not same\n");
//	return 0;
//}


//void test(int (*p)[5], int r, int c)
//{
//	int i = 0;
//	for (i = 0; i < 3; i++)
//	{
//		int j = 0;
//		for (j = 0; j < 5; j++)
//		{
//			printf("%d ", *(*(p+i)+j));//第i行的所有元素
//			//*(p+i)是二维数组行的循环
//		}
//		printf("\n");
//	}
//}
//int main()
//{
//	//char arr[7] = "abcdef";
//	//char (*p)[7] = &arr;
//	int arr[3][5] = { {1,2,3,4,5},{2,3,4,5,6},{3,4,5,6,7} };
//	test(arr, 3, 5);
//	return 0;
//}


//int Add(int x,int y)
//{
//	return x + y;
//}
//int main()
//{
//	int(*pf)(int,int) = Add;
//	printf("%d\n", (*pf)(3, 5));
//	printf("%d\n", pf(3,5));
//	printf("%d\n", Add);
//	printf("%d\n", &Add);
//	return 0;
//}

//    (*(void (*)())0)();
//    (void (*)())0   0被强制类型转换成void (*)() 函数指针类型，0被当做函数的地址
//    (*(void (*)())0)()   调⽤0地址处的这个函数,这个函数没有参数，也没有返回值

//     void (*signal(int , void(*)(int)))(int);
//     signal(int , void(*)(int))  //
//     void (*)(int)



void menu()
{
	printf("*************************\n");
	printf("****** 1:add 2:sub ******\n");
	printf("****** 3:mul 4:div ******\n");
	printf("******5:compl 0:exit*****\n");
	printf("*************************\n");
}
int add(int x, int y)
{
	return x + y;
}
int sub(int x, int y)
{
	return x - y;
}
int mul(int x, int y)
{
	return x * y;
}
int div(int x, int y)
{
	return x / y;
}
int complement(int x, int y)
{
	return x % y;
}
int main()
{
	int x = 0, y = 0;
	int input = 0;
	int num = 0;
	do
	{
		menu();
		printf("请选择：");
		scanf("%d", &input);
		switch (input)
		{
		case 1:
			printf("输入要计算的数：");
			scanf("%d %d", &x, &y);
			num = add(x, y);
			printf("%d\n", num);
			break;
			case 2:
			printf("输入要计算的数：");
			scanf("%d %d", &x, &y);
			num = sub(x, y);
			printf("%d\n", num);
			break;
		case 3:
			printf("输入要计算的数：");
			scanf("%d %d", &x, &y);
			num = mul(x, y);
			printf("%d\n", num);
			break;
		case 4:
			printf("输入要计算的数：");
			scanf("%d %d", &x, &y);
			num = div(x, y);
			printf("%d\n", num);
			break;
		case 5:
			printf("输入要计算的数：");
			scanf("%d %d", &x, &y);
			num = complement(x, y);
			printf("%d\n", num);
			break;
		case 0:
			printf("退出程序");
			break;
		default:
			printf("输入错误！\n");
			break;
		}
	} while (input);
	printf("%d\n", num);
	int(*input[5])(int ,int) = {0,add,sub,mul,div};//转移表
	return 0;
}



